//
//  RootViewController.swift
//  Mircoblog-swift
//
//  Created by zz on 16/2/24.
//  Copyright © 2016年 zz. All rights reserved.
//

import UIKit
import HMRefresh

let ID: String = "mircoblog"

/// 根视图控制器-其他主控制器的基类
class RootViewController: UIViewController{

    // MARK: - 公共属性
    /// 表格视图
    var tableView: UITableView?
/// 访客视图 - 如果用户登录成功，就不需要创建访客视图
   // 如果使用懒加载，会在登录成功仍然创建访客视图，造成无谓的内存开销
    var visitorView: VisitorView?
    // 刷新刷新
    var refreshControl: HMRefreshControl = HMRefreshControl()
    
    
    // MARK: - View生命周期
    override func loadView() {
         // 1. 创建根视图
        view = UIView()
        
        UserAccount.sharedUserAccount.isLogin ? setTableView():setVisitorView()
        
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        print("访客视图 \(visitorView)")
        
        if UserAccount.sharedUserAccount.isLogin {
            loadData()
        } else {
            NSNotificationCenter.defaultCenter().addObserver(
                self,
                selector: "loginSuccessed",
                name: ZDMircoblogSuccessedNotification,
                object: nil)
        }
        
        
    }
    //MARK: - 加载数据
    //记载数据，放在子类重写
    func loadData() {
        
    }
    //MARK: - 登录成功监听方法
    @objc private func loginSuccessed() {
    
        view = nil //会重新调用loadView
        
        //注销通知
        NSNotificationCenter.defaultCenter().removeObserver(self, name: ZDMircoblogSuccessedNotification, object: nil)
    }
    //MARK: - 设置界面
    /// 访客视图
    private func setVisitorView(){
    
        visitorView = VisitorView()

        view.addSubview(visitorView!)
        
        // 自动布局
        visitorView!.snp_makeConstraints(closure: { (make) -> Void in
            make.edges.equalTo(view)
        })
        visitorView!.delegate = self
        
        // 设置状态栏按钮 - 如果换行参数，一定保证一个参数一行
        navigationItem.leftBarButtonItem = UIBarButtonItem(
            title: "注册",
            style: .Plain,
            target: self,
            action: "visitorViewDidRegister")
        navigationItem.rightBarButtonItem = UIBarButtonItem(
            title: "登录",
            style: .Plain,
            target: self,
            action: "visitorViewDidLogin")
    }
    /// tableView
    private func setTableView(){
    
        tableView = UITableView(frame: CGRectZero, style: .Plain)

        view.addSubview(tableView!)
        // 自动布局－让子视图和根视图同样大小！
        tableView!.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(view)
        }
        
        tableView!.dataSource = self
        tableView!.delegate = self
        
    }
    /// 设置刷新控件
    /// 需要刷新控件的子控制器单独调用 `setupRefreshControl`
    /// 私有函数不能被子类`继承`
    func setRefresh(){
    
//        guard let tableView = tableView else {
//            return
//        }

        // 默认没有刷新控件，但是，如果 `刷新控件` 已经存在，不需要再次添加
 
        
       
        tableView?.addSubview(refreshControl)
        
        // 设置下拉刷新视图
        refreshControl.pulldownView = ZDPulldownRefreshView.refreshView()
        refreshControl.normalString = "下拉起飞"
        refreshControl.pullingString = "放开起飞"
        refreshControl.refreshingString = "正在起飞"
        refreshControl.lastRefreshString = "末次 "
        refreshControl.donotPullupString = "没有更多数据"
        
        // 设置刷新控件的监听方法
        refreshControl.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
    }

}
//MARK: - VisitorViewDelegate
extension RootViewController:VisitorViewDelegate{

    func visitorViewDidRegister() {
        
    }
    func visitorViewDidLogin() {
        self.presentViewController(UINavigationController(rootViewController: OAuthViewController()), animated: true, completion: nil)
    }
}
//MARK: - UITableViewDataSource,UITableViewDelegate
extension RootViewController: UITableViewDataSource,UITableViewDelegate{

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        return UITableViewCell()
    }


   
}
